<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('salary_grades', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 基础信息
            $table->string('code', 50)->unique(); // 薪资等级编码
            $table->string('name', 100); // 薪资等级名称
            $table->string('sequence', 20); // 薪资序列：administrative, technical, management, etc.

            // 等级信息
            $table->integer('level')->default(1); // 等级数字
            $table->string('level_name', 50)->nullable(); // 等级名称：初级、中级、高级等
            $table->integer('sort_order')->default(0); // 排序

            // 薪资标准
            $table->decimal('base_salary', 10, 2); // 基本薪资标准
            $table->decimal('salary_min', 10, 2)->nullable(); // 薪资下限
            $table->decimal('salary_max', 10, 2)->nullable(); // 薪资上限
            $table->string('salary_currency', 10)->default('CNY'); // 薪资货币

            // 薪资结构
            $table->decimal('performance_bonus_percentage', 5, 2)->nullable(); // 绩效奖金比例
            $table->decimal('allowance_percentage', 5, 2)->nullable(); // 津贴比例
            $table->decimal('overtime_rate', 5, 2)->nullable(); // 加班费率

            // 适用条件
            $table->integer('min_experience_years')->nullable(); // 最低经验年限
            $table->string('education_requirement', 50)->nullable(); // 学历要求
            $table->json('skill_requirements')->nullable(); // 技能要求

            // 适用岗位
            $table->json('applicable_positions')->nullable(); // 适用岗位
            $table->json('applicable_departments')->nullable(); // 适用部门

            // 调整信息
            $table->decimal('annual_adjustment_rate', 5, 2)->nullable(); // 年薪资调整率
            $table->date('effective_date'); // 生效日期
            $table->date('expiration_date')->nullable(); // 失效日期

            // 统计信息
            $table->integer('employee_count')->default(0); // 适用员工数量
            $table->decimal('average_salary', 10, 2)->nullable(); // 平均薪资

            // 状态信息
            $table->string('status', 20)->default('active'); // 状态：active, inactive, expired
            $table->boolean('is_default')->default(false); // 是否默认等级

            // 审批信息
            $table->string('approved_by', 100)->nullable(); // 审批人
            $table->date('approved_at')->nullable(); // 审批时间

            // 扩展字段
            $table->json('benefits')->nullable(); // 福利待遇
            $table->json('adjustment_history')->nullable(); // 调整历史
            $table->text('notes')->nullable(); // 备注

            // 索引
            $table->index(['sequence']);
            $table->index(['level']);
            $table->index(['status']);
            $table->index(['effective_date']);
            $table->index(['expiration_date']);
            $table->index(['is_default']);
            $table->index(['code']);
            $table->index(['sequence', 'level']); // 复合索引
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('salary_grades');
    }
};
